////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2016-2017 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  camxtitan17xsettingsmanager.cpp
/// @brief Implementation of the Titan17xSettingsManager class.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Common CamX Includes
#include "camxdefs.h"
#include "camxmem.h"
#include "camxtypes.h"
#include "camxutils.h"

// Core CamX Includes
#include "camxtitan17xsettingsmanager.h"
#include "g_camxtitan17xsettings.h"

CAMX_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Public Methods
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Titan17xSettingsManager::Create
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Titan17xSettingsManager* Titan17xSettingsManager::Create()
{
    CamxResult               result                   = CamxResultSuccess;
    Titan17xSettingsManager* pTitan17xSettingsManager = CAMX_NEW Titan17xSettingsManager();
    if (pTitan17xSettingsManager != NULL)
    {
        result = pTitan17xSettingsManager->Initialize();
        if (CamxResultSuccess != result)
        {
            CAMX_DELETE pTitan17xSettingsManager;
            pTitan17xSettingsManager = NULL;
        }
    }
    else
    {
        CAMX_LOG_ERROR(CamxLogGroupCore, "Out of memory; cannot create Titan17xSettingsManager");
    }

    return pTitan17xSettingsManager;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Titan17xSettingsManager::Destroy
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
VOID Titan17xSettingsManager::Destroy()
{
    CAMX_DELETE this;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Protected Methods
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Titan17xSettingsManager::~Titan17xSettingsManager
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Titan17xSettingsManager::~Titan17xSettingsManager()
{
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Titan17xSettingsManager::HwValidateSettings
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CamxResult Titan17xSettingsManager::HwValidateSettings()
{
    CamxResult result = CamxResultSuccess;

    if (2 < m_titan17xStaticSettings.numMetadataResults)
    {
        CAMX_LOG_ERROR(CamxLogGroupCore, "numMetadataResults must be <= 2...clamping to 2");
        m_titan17xStaticSettings.numMetadataResults = 2;
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Private Methods
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Titan17xSettingsManager::Initialize
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CamxResult Titan17xSettingsManager::Initialize()
{
    CamxResult result = CamxResultSuccess;

    // Intialize the base class to load the defaults and override settings
    result = SettingsManager::Initialize(&m_titan17xStaticSettings);

    return result;
}

CAMX_NAMESPACE_END
